iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Mobile Development

從零開始的Swift開發心路歷程2系列 第 29

【從零開始的Swift開發心路歷程2-Day29】doodle jump小遊戲設計(5)Game Over!

  • 分享至 

  • xImage
  •  

昨天讓人物可以一直踩著平台往上跳躍,但是人物只要踩空就會進入一直往下掉的無限輪迴,因此我們今天要來實作遊戲失敗的判定機制
首先,我們替失敗線新增一個SKSpriteNode

let gameOverLine = SKSpriteNode(color: .red, size: CGSize(width: 700, height: 10))

並且在bitmasks的enum中加入case gameOverLine
因為接下來也要去判定人物及失敗線的接觸
所以要設定player的contactTestBitMask為

player.physicsBody?.contactTestBitMask = bitmasks.platform.rawValue | bitmasks.gameOverLine.rawValue

再來就是失敗線的一些屬性宣告,為了美觀,所以我們把失敗線的透明度設為0

gameOverLine.alpha = 0
gameOverLine.position = CGPoint(x: player.position.x, y: player.position.y - 200)
gameOverLine.zPosition = 10
gameOverLine.physicsBody = SKPhysicsBody(rectangleOf: gameOverLine.size)
gameOverLine.physicsBody?.affectedByGravity = false
gameOverLine.physicsBody?.allowsRotation = false
gameOverLine.physicsBody?.categoryBitMask = bitmasks.gameOverLine.rawValue
gameOverLine.physicsBody?.collisionBitMask = 0
gameOverLine.physicsBody?.contactTestBitMask = bitmasks.platform.rawValue | bitmasks.player.rawValue
addChild(gameOverLine)

接著我們在func update中加入下面程式碼,讓失敗線的y座標固定在人物的y座標-600

if player.physicsBody!.velocity.dy > 0{
    gameOverLine.position.y = player.position.y - 600
}

還有在func didBegin中,宣告平台接觸到失敗線就被移除還有人物接觸到失敗線就判定失敗的規則

if contactA.categoryBitMask == bitmasks.platform.rawValue && contactB.categoryBitMask == bitmasks.gameOverLine.rawValue{
            contactA.node?.removeFromParent()
        }
if contactA.categoryBitMask == bitmasks.player.rawValue && contactB.categoryBitMask == bitmasks.gameOverLine.rawValue{
            gameOver()
        }

遊戲失敗的function,就是一個簡單的轉場

func gameOver(){
        let gameOverScene = GameOverScene(size: self.size)
        let transition = SKTransition.crossFade(withDuration: 0.5)
        view?.presentScene(gameOverScene,transition: transition)
}

遊戲失敗畫面會有一個可以重來的按鈕,按了會重新回到遊戲畫面

如此一來就完成遊戲失敗的判定啦!
明天我們會來實作分數及最佳分數的功能,也順便來説説這30天來的心得吧!


上一篇
【從零開始的Swift開發心路歷程2-Day28】doodle jump小遊戲設計(4)我要越跳越高!
下一篇
【從零開始的Swift開發心路歷程2-Day30】doodle jump小遊戲設計(6)記錄分數與最佳分數
系列文
從零開始的Swift開發心路歷程230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言